const {generateSha1ByBasename} = require("../../util/hash");
const {getBasenameWithoutExt} = require("../../util/file");
const markdownItLinkOpenEnhanced = (md) => {
// 1. 保存默认的链接开标签渲染规则以备后用
    const defaultLinkOpenRenderer = md.renderer.rules.link_open || function (tokens, idx, options, env, self) {
        return self.renderToken(tokens, idx, options);
    };

// 2. 重写 `link_open` 规则
    md.renderer.rules.link_open = function (tokens, idx, options, env, self) {
        // 获取当前这个链接令牌
        const token = tokens[idx];

        const hrefIndex = token.attrIndex('href');
        if (hrefIndex >= 0) {
            const href = token.attrGet('href').trim();
            if (href.startsWith("https://") || href.startsWith("http://")){
                const targetIndex = token.attrIndex('target');
                if (targetIndex < 0) {
                    token.attrPush(['target', '_blank']); // 添加新属性
                } else {
                    token.attrs[targetIndex][1] = '_blank'; // 更新已有属性值
                }
            } else if (/#[a-f0-9]+/.test(href)){
                // slash外链
                const hrefHashMatch = href.match(/#([a-f0-9]+)/);
                if (hrefHashMatch) {
                    token.attrs[hrefIndex][1] = `/vault2/${hrefHashMatch[1]}`;
                }
                const targetIndex = token.attrIndex('target');
                if (targetIndex < 0) {
                    token.attrPush(['target', '_blank']); // 添加新属性
                } else {
                    token.attrs[targetIndex][1] = '_blank'; // 更新已有属性值
                }
            }
            else {
                // 标准外链
                const hrefHash = generateSha1ByBasename(getBasenameWithoutExt(href));
                token.attrs[hrefIndex][1] = `${hrefHash}#~:~hint=${href}`; // 更新已有属性值
            }
        }
        // 示例1：为所有链接添加 target="_blank" 和 rel="noopener noreferrer"
        // const targetIndex = token.attrIndex('target');
        // if (targetIndex < 0) {
        //     token.attrPush(['target', '_blank']); // 添加新属性
        // } else {
        //     token.attrs[targetIndex][1] = '_blank'; // 更新已有属性值
        // }
        // token.attrPush(['rel', 'noopener noreferrer']);
        //
        // // 示例2：根据链接地址动态添加 CSS 类
        // const hrefIndex = token.attrIndex('href');
        // if (hrefIndex >= 0) {
        //     const href = token.attrs[hrefIndex][1];
        //     if (href.startsWith('https://api.example.com')) {
        //         token.attrPush(['class', 'internal-api-link']);
        //     }
        // }

        // 将修改后的令牌交给默认渲染器处理
        return defaultLinkOpenRenderer(tokens, idx, options, env, self);
    };
}

module.exports = markdownItLinkOpenEnhanced;